(function () {
  var commonFunc = {
    modal: {
      alert: function (opts) {
        var options = {
          isIcon: false, //是否显示图片，默认是false
          iconSrc: '', //图片链接地址
          text: '', //提示文字内容
          tip: '',
          btnOk: '确定', //确定按钮文字内容
          ok: function () {
          } //点击确认按钮的回调函数
        }
        if (typeof opts == 'string') {
          options.text = opts
        } else {
          Object.assign(options, opts) //用户传进来的配置合并覆盖默认值
        }
        this._modal('alert', options) //参数与模板渲染插入body里
      },
      confirm: function (opts) {
        var options = {
          isIcon: false, //是否显示图片，默认是false
          iconSrc: '', //图片链接地址
          text: '', //提示文字内容
          tip: '',
          btnOk: '确定', //确定按钮文字内容
          btnCancel: '取消', //取消按钮文字内容
          ok: function () {
          }, //点击确认按钮的回调函数
          cancel: function () {
          } //点击取消按钮的回调函数
        }
        Object.assign(options, opts) //用户传进来的配置合并覆盖默认值
        this._modal('confirm', options) //参数与模板渲染插入body里
      },
      _modal: function (type, options) {
        if (options.noClose) {
          var closeIcon = '<div class="model-close_icon"></div>'
        } else {
          var closeIcon = '<div class="model-close_icon"><span><img src="' + options.closeImg + '" alt=""></span></div>'
        }
        var iconPart = (options.isIcon && options.iconSrc) ? '<div class="modal-img ' + (options.big || '') + '"><img src="' + options.iconSrc + '"></div>' : '' //icon的dom部分
        var btnPart = '' //按钮的dom部分
        var timeId = 'modal' + new Date().getTime() //生成唯一modal的id值
        var textPart = '<div class="modal-text">' + options.text + '</div><div class="modal-tip">' + options.tip + '</div>' //提示文字的dom部分
        var text2Part = '<div class="modal-text2">' + options.text + '</div><div class="modal-text text3">剩余<span class="text2">' + options.text2 + '</span>张</div>'
        //根据type区分是alert还是confirm来确定是一个按钮还是两个按钮
        if (type == 'alert') {
          btnPart = '<div class="modal-alert">' + options.btnOk + '</div>'
        } else {
          btnPart = '<div class="modal-confirm row no-gutter"><div class="modal-btn cancel">' + options.btnCancel + '</div><div class="modal-btn ok">' + options.btnOk + '</div></div>'
        }
        var content =
          '<div class="modal" id="' + timeId + '">' +
          '            <div class="modal-content">' +
          closeIcon + iconPart
        content = options.text2 ? (content + text2Part) : (content + textPart)
        content = content +
          btnPart +
          '            </div>' +
          '        </div>'
        $('body').append(content) //插入body底部
        $('.modal').on('touchmove', function (e) {
          e.preventDefault()
        }) //阻止默认滚动穿透行为
        $('#' + timeId + ' .model-close_icon span').click(function () {
          $(this).parents('.modal').remove()
          if (options.close) {
            options.close()
          }
        })
        //下面是绑定点击事件，执行相应回调函数
        if (type == 'alert') {
          $('#' + timeId + ' .modal-alert').click(function () {
            $(this).parents('.modal').remove()
            if (options.ok) {
              options.ok()
            }
          })
        } else {
          $('#' + timeId + ' .modal-btn').click(function () {
            $(this).parents('.modal').remove()
            if ($(this).hasClass('ok')) {
              if (options.ok) {
                options.ok()
              }
            } else {
              if (options.cancel) {
                options.cancel()
              }
            }
          })
        }
      }
    },
    toast: function (opts) {
      var options = {
        msg: '',
        time: 1000
      }
      Object.assign(options, opts)
      var content = '<div class="toast">' + options.msg + '</div>'
      $('body').append(content)
      setTimeout(function () {
        $('.toast').animate({opacity: '0'}, function () {
          this.remove()
        })
      }, options.time)
    },
    pixel2rem: function () {
      if (/Android [4-6]/.test(navigator.appVersion)) {
        window.addEventListener('resize', function () {
          if (document.activeElement.tagName == 'INPUT' || document.activeElement.tagName == 'TEXTAREA') {
            window.setTimeout(function () {
              document.activeElement.scrollIntoViewIfNeeded()
            }, 0)
          }
        })
      }
      var docEl = document.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
          var clientWidth = docEl.clientWidth
          if (!clientWidth) return
          var fzNum = 16 * (clientWidth / 375)
          docEl.style.fontSize = fzNum > 30 ? 30 + 'px' : fzNum + 'px'
        }
      if (!document.addEventListener) return
      window.addEventListener(resizeEvt, recalc, false)
      document.addEventListener('DOMContentLoaded', recalc, false)
    },
    formatTime: function (time, option) {
      time = +time * 1000
      const d = new Date(time)
      const now = Date.now()
      const diff = (now - d) / 1000
      if (diff < 30) {
        return '刚刚'
      } else if (diff < 3600) { // less 1 hour
        return Math.ceil(diff / 60) + '分钟前'
      } else if (diff < 3600 * 24) {
        return Math.ceil(diff / 3600) + '小时前'
      } else if (diff < 3600 * 24 * 2) {
        return '1天前'
      }
      if (option) {
        return parseTime(time, option)
      } else {
        return d.getMonth() + 1 + '月' + d.getDate() + '日' + d.getHours() + '时' + d.getMinutes() + '分'
      }
    },
    getQueryString: function (name) {
      var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
      var r = window.location.search.substr(1).match(reg)
      if (r != null) return unescape(r[2])
      return null
    }
  }

  window.commonFunc = commonFunc
  window.toast = commonFunc.toast
}(window, $))
